/*
 * Copyright 2010 Andrew Pietsch
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you
 * may not use this file except in compliance with the License. You may
 * obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
 * implied. See the License for the specific language governing permissions
 * and limitations under the License.
 */

package com.pietschy.gwt.pectin.util;

import com.pietschy.gwt.pectin.client.bean.BeanModelProvider;
import com.pietschy.gwt.pectin.client.bean.NotCollectionPropertyException;
import com.pietschy.gwt.pectin.client.bean.UnknownPropertyException;

/**
 * This class provides an implementation of {@link com.pietschy.gwt.pectin.client.bean.BeanModelProvider}
 * that can be used in JVM based tests.  This class <b>can not</b> be used withing client code as it uses reflection.
 */
class ReflectionBeanModelProvider<B> extends BeanModelProvider<B>
{
   private ProviderSupport<B> support;

   public ReflectionBeanModelProvider(Class<B> clazz)
   {
      support = new ProviderSupport<B>(clazz);

   }

   public Class getPropertyType(String property) throws UnknownPropertyException
   {
      return support.getPropertyType(property);

   }
   
   public Object readProperty(B bean, String property) throws UnknownPropertyException
   {
      return support.readProperty(bean, property);
   }

   public void writeProperty(B bean, String property, Object value) throws UnknownPropertyException
   {
      support.writeProperty(bean, property, value);
   }

   public Class getElementType(String property) throws UnknownPropertyException, NotCollectionPropertyException
   {
      return support.getElementType(property);
   }
}
